<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class Validacao {

    function cnpj($_cnpj) {
        if (strlen($_cnpj) <> 18)
            return FALSE;
        $soma1 = ($_cnpj[0] * 5) +
                ($_cnpj[1] * 4) +
                ($_cnpj[3] * 3) +
                ($_cnpj[4] * 2) +
                ($_cnpj[5] * 9) +
                ($_cnpj[7] * 8) +
                ($_cnpj[8] * 7) +
                ($_cnpj[9] * 6) +
                ($_cnpj[11] * 5) +
                ($_cnpj[12] * 4) +
                ($_cnpj[13] * 3) +
                ($_cnpj[14] * 2);
        $resto = $soma1 % 11;
        $digito1 = $resto < 2 ? 0 : 11 - $resto;
        $soma2 = ($_cnpj[0] * 6) +
                ($_cnpj[1] * 5) +
                ($_cnpj[3] * 4) +
                ($_cnpj[4] * 3) +
                ($_cnpj[5] * 2) +
                ($_cnpj[7] * 9) +
                ($_cnpj[8] * 8) +
                ($_cnpj[9] * 7) +
                ($_cnpj[11] * 6) +
                ($_cnpj[12] * 5) +
                ($_cnpj[13] * 4) +
                ($_cnpj[14] * 3) +
                ($_cnpj[16] * 2);
        $resto = $soma2 % 11;
        $digito2 = $resto < 2 ? 0 : 11 - $resto;
        return (($_cnpj[16] == $digito1) && ($_cnpj[17] == $digito2));
    }

    //
    /**
     * Verifica se o CPF informado é valido
     * @param     string
     * @return     bool
     */
    function cpf($_cpf) {
        // Verifiva se o número digitado contém todos os digitos
        $_cpf = str_pad(ereg_replace('[^0-9]', '', $_cpf), 11, '0', STR_PAD_LEFT);

        // Verifica se nenhuma das sequências abaixo foi digitada, caso
        //seja, retorna falso
        if (strlen($_cpf) != 11 ||
                $_cpf == '00000000000' ||
                $_cpf == '11111111111' ||
                $_cpf == '22222222222' ||
                $_cpf == '33333333333' ||
                $_cpf == '44444444444' ||
                $_cpf == '55555555555' ||
                $_cpf == '66666666666' ||
                $_cpf == '77777777777' ||
                $_cpf == '88888888888' ||
                $_cpf == '99999999999') {
            return FALSE;
        } else {
            // Calcula os números para verificar se o CPF é verdadeiro
            for ($t = 9; $t < 11; $t++) {
                for ($d = 0, $c = 0; $c < $t; $c++) {
                    $d += $_cpf{$c} * (($t + 1) - $c);
                }

                $d = ((10 * $d) % 11) % 10;
                if ($_cpf{$c} != $d) {
                    return FALSE;
                }
            }
            return TRUE;
        }
    }

}
